package org.yelongframework.spring.web.servlet;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
import org.yelongframework.lang.Nullable;

/**
 * SpringWebMvc支持
 * 
 * @since 1.0.0
 */
public interface SpringWebMvcSupport {

	// ==================================================处理器方法==================================================

	/**
	 * 获取请求对应的处理器方法
	 * 
	 * @param request 请求
	 * @return 处理器方法
	 * @see RequestMappingHandlerMapping
	 * @throws Exception 异常
	 */
	@Nullable
	HandlerMethod getRequestMappingHandlerMethod(HttpServletRequest request) throws Exception;

	/**
	 * 获取当前请求对应的处理器方法
	 * 
	 * @return 处理器方法
	 * @see RequestMappingHandlerMapping
	 * @see #getRequest()
	 * @throws Exception 异常
	 */
	@Nullable
	HandlerMethod getCurrentRequestMappingHandlerMethod() throws Exception;

	// ==================================================请求==================================================

	/**
	 * @return 当前线程的请求
	 */
	@Nullable
	HttpServletRequest getRequest();

	// ==================================================响应==================================================

	/**
	 * @return 当前线程的响应
	 */
	@Nullable
	HttpServletResponse getResponse();

	// ==================================================注册控制器==================================================

	/**
	 * 注册控制器
	 * 
	 * @param beanName  Bean名称
	 * @param beanClass Bean类型
	 * @throws Exception 异常
	 */
	void registryController(String beanName, Class<?> beanClass) throws Exception;

}
